package pack0_interfaceAndAbstractClass;

/**
 * 1. 对于最底层的类（接口），用 抽象类 或者 接口 来声明都行，两者可相互替代
 * 2. 继承抽象类 或者 实现接口时，子类需要重写所有抽象方法（即没有方法体的方法）
 * 3. 接口和抽象类都可以定义方法体：接口中用default关键字，抽象类中不带abstract关键字都是有方法体的方法
 */
interface HumanInterface{
    void speak();
    void walk();
    default void eat(){
        System.out.println("I can eat");
    }
}

abstract class HumanAbstractClass{
    abstract void speak();
    abstract void walk();
    void eat(){
        System.out.println("I can eat");
    }
}

class Human1 implements HumanInterface{

    @Override
    public void speak() {

    }

    @Override
    public void walk() {

    }

    @Override
    public void eat() {

    }
}

class Human2 extends HumanAbstractClass{

    @Override
    void speak() {

    }

    @Override
    void walk() {

    }
}

public class code001_interfaceAndAbstractClass {


}
